package fiuba.algo3.algothief.modelo;

import java.util.ArrayList;
import java.util.Random;
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;


public class ListaPaises {
		
	public ListaPaises(){}
	
	public void setearPaisesAEscapar(ArrayList<Pais> lista) {		
		lista.add(new Pais("Grecia","celeste y blanca con una cruz blanca","euro","griego","Athenas",38,23.72));
		lista.add(new Pais("Irak","negro,blanco y rojo","Dinar iraqui","arabe,kurdo","Bagdad",33.35,44.42));
		lista.add(new Pais("Mali","verde,amarillo y rojo","franco de Africa Occidental","frances","Bamako",12.65,-7.99));
		lista.add(new Pais("Tailandia","rojo,azul y blanco","baht tailandes","tailandes","Bangkok",13.75,100.52));
		lista.add(new Pais("Hungria","rojo,verde y blanco","forinto hungaro","hungaro","Budapest",47.50,19.04));
		lista.add(new Pais("Argentina","celeste y blanca","peso","espaniol","Buenos Aires",-34.60,-58.38));
		lista.add(new Pais("Egipto","rojo,negro y blanco","libra egipcia","arabe","El Cairo",30.06,31.24));
		lista.add(new Pais("Turquia","rojo y blanco","Lira turca","turco","Ankara",39.87,32.87));
		lista.add(new Pais("Nepal","rojo y blanco","rupia nepali","nepali","Katmandu",27.72,85.37));
		lista.add(new Pais("Ruanda","celeste,amarillo y verde","franco ruandes","kiniaruanda,frances,ingles","Kigali",-1.95,30.06));
		lista.add(new Pais("Peru","rojo y blanco","nuevo sol","espaniol,quechua,aimara","Lima",-12.04,-77.01));
		lista.add(new Pais("Inglaterra","rojo y blanco","libra esterlina","ingles","Londres",51.51,-0.13));
		lista.add(new Pais("Mexico","rojo,verde y blanco","peso mexicano","espaniol","Mexico D.F",19.42,-99.15));
		lista.add(new Pais("Canada","rojo y blanco","dolar canadiense","ingles,frances","Ottawa",45.42,-75.7));
		lista.add(new Pais("Rusia","azul,rojo y blanco","rublo ruso","ruso","Moscu",55.75,37.72));
		lista.add(new Pais("India","naranja,verde y blanco","rupia india","ingles,hindi","Nueva Delhi",28.7,77.2));
		lista.add(new Pais("Estados Unidos","azul,rojo y blanco","dolar","ingles","Washington D.C",38.9,-77.04));
		lista.add(new Pais("Noruega","azul,rojo y blanco","corona noruega","noruego,nynorsk,bokmal","Oslo",59.91,10.75));
		lista.add(new Pais("Francia","azul,rojo y blanco","euro,franco","frances","Paris",48.87,2.33));
		lista.add(new Pais("China","rojo y amarillo","yuan chino","chino mandarin","Pekin",39.91,116.39));
		lista.add(new Pais("Islandia","azul,rojo y blanco","corona islandesa","islandes","Reikiavik",64.15,-21.88));
		lista.add(new Pais("Brasil","azul,verde y amarillo","real","portugues","Brasilia",-15.80,-47.87));
		lista.add(new Pais("Italia","verde,rojo y blanco","euro","italiano","Roma",41.9,12.5));
		lista.add(new Pais("San Marino","celeste y blanco","euro","italiano","San Marino",43.93,12.45));
		lista.add(new Pais("Singapur","rojo y blanco","dolar de Singapur","ingles,malayo,tamil,mandarin estandar","Ciudad de Singapur",1.3,103.85));
		lista.add(new Pais("Japon","rojo y blanco","Yen","Japones","Tokio",35.68,139.76));

	}
	
	public void generarXML(ArrayList<Pais> paises) throws ParserConfigurationException, TransformerException, SAXException, IOException {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		Document doc = db.newDocument();
		Element elementoPaises = doc.createElement("Paises");
		doc.appendChild(elementoPaises);
		String nombreArchivo;
		nombreArchivo =  "paises.xml";
		this.setearPaisesAEscapar(paises);
		int tamanioLista = paises.size();
		for(int i=0; i<tamanioLista; i++) {
			Lugar lugar1 = new Lugar("Banco");
			Lugar lugar2 = new Lugar("Aeropuerto");
			Lugar lugar3 = new Lugar("Biblioteca");
			lugar1.conPistaFacil(new Pista("Su moneda es el " + paises.get(i).getMoneda()));
			lugar1.conPistaMedia(new Pista("Su moneda es el " + paises.get(i).getMoneda()));
			lugar1.conPistaDificil(new Pista("Su moneda es el " + paises.get(i).getMoneda()));
			paises.get(i).agregarLugar(lugar1);
			lugar2.conPistaFacil(new Pista("Su bandera es " + paises.get(i).getBandera()));
			lugar2.conPistaMedia(new Pista("Su bandera es " + paises.get(i).getBandera()));
			lugar2.conPistaDificil(new Pista("Su capital es " + paises.get(i).getCapital()));
			paises.get(i).agregarLugar(lugar2);
			lugar3.conPistaFacil(new Pista("Su idioma es " + paises.get(i).getIdioma()));
			lugar3.conPistaMedia(new Pista("Su idioma es " + paises.get(i).getIdioma()));
			lugar3.conPistaDificil(new Pista("Su idioma es " + paises.get(i).getIdioma()));
			paises.get(i).agregarLugar(lugar3);
			Element paisSerializado = (paises.get(i)).serializar(doc);
			elementoPaises.appendChild(paisSerializado);
		}
		
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		DOMSource source = new DOMSource(doc);
		File archivoDestino = new File(nombreArchivo);
		StreamResult result = new StreamResult(archivoDestino);
		transformer.transform(source, result);
		
	
		
	}	

	public Pais seleccionarPaisAleatorio() throws ParserConfigurationException, TransformerException, SAXException, IOException {
		ArrayList<Pais> lista = new ArrayList<Pais>();
		this.generarXML(lista);
		int tamanioArray = lista.size();	
		Random rand = new Random();
		int posAleatoria;
		posAleatoria = rand.nextInt(tamanioArray-1);
		return (lista.get(posAleatoria));
		
	}

}